package com.example.service.impl;

import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.UpdateWrapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.example.entity.PsLineInfo;
import com.example.entity.PsPoleInfo;
import com.example.exception.CustomException;
import com.example.mapper.PsLineInfoMapper;
import com.example.mapper.PsPoleInfoMapper;
import com.example.service.PsLineInfoService;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.example.vo.PsLineInfoVo;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.util.List;

/**
 * <p>
 * 服务实现类
 * </p>
 *
 * @author yt
 * @since 2024-04-22
 */
@Service
@RequiredArgsConstructor
@Slf4j
public class PsLineInfoServiceImpl extends ServiceImpl<PsLineInfoMapper, PsLineInfo> implements PsLineInfoService {
   @Resource
    private final PsLineInfoMapper psLineInfoMapper;
    @Resource
    private final PsPoleInfoMapper psPoleInfoMapper;

    @Override
    public List<PsLineInfo> selectLineCode() {
        List<PsLineInfo> psLineInfos = psLineInfoMapper.selectLineCode();
        return psLineInfos;
    }

    @Override
    public List<PsLineInfo> selectIsStart() {
//        List<PsLineInfo> list = psLineInfoMapper.selectObjs(Wrappers.<PsLineInfo>lambdaQuery().select(PsLineInfo::getIsstart,PsLineInfo::getId));
//        PsLineInfo psLineInfo = new PsLineInfo();
        List<PsLineInfo> psLineInfos = psLineInfoMapper.selectIsStart();
//        for (PsLineInfo psLineInfoType : psLineInfos) {
//            if (psLineInfoType.getIsstart() == 1) {
//                psLineInfo.setIsstartStr("开启");
//            } else {
//                psLineInfo.setIsstartStr("未开启");
//            }
//        }
        return psLineInfos;
    }

    @Override
    public List<PsLineInfo> down() {
        List<PsLineInfo> down = psLineInfoMapper.down();
        return down;
    }

    /**
     * 线路名称删除
     *
     * @param id
     */
    @Override
    public int delete(Integer id) {
        int count = 0;
        QueryWrapper queryWrapper = new QueryWrapper();
        queryWrapper.eq("id", id);
//        PsLineInfo psLineInfo = psLineInfoMapper.selectOne(queryWrapper);
        count = psLineInfoMapper.deleteById(id);
        if (count > 0) {
            return 1;
        }
//        //TODO 路线名称不为空只能停用
//        log.info("线路名称:{}", psLineInfo.getLinename());
//        if (psLineInfo.getLinename().equals("") || psLineInfo.getLinename() == null) {
//
//        } else {
//            System.out.println("不能删除");
//        }
        return 0;
    }

    /**
     * 修改状态
     *
     * @param psLineInfo
     * @return
     */
    @Override
    public int updateIsStart(PsLineInfo psLineInfo) {
        //修改的逻辑
        int i = 0;
        if (psLineInfo.getIsstart() == 0) {
            UpdateWrapper<PsLineInfo> updateWrapper = new UpdateWrapper<>();
            updateWrapper.set("isStart", 1).eq("id", psLineInfo.getId());
            i = psLineInfoMapper.update(psLineInfo, updateWrapper);
        } else if (psLineInfo.getIsstart() == 1) {
            UpdateWrapper<PsLineInfo> updateWrapper = new UpdateWrapper<>();
            updateWrapper.set("isStart", 0).eq("id", psLineInfo.getId());
            i = psLineInfoMapper.update(psLineInfo, updateWrapper);
        }
        return i;
    }

    /**
     * 查询
     *
     * @param page         Mybatis-Plus所提供的分页对象,必须位于第一个参数的位置
     * @param psLineInfoVo
     * @return
     */
    @Override
    public IPage<PsLineInfo> findBySearch(Page<PsLineInfo> page, PsLineInfoVo psLineInfoVo) {
        Page<PsLineInfo> page1 = new Page<PsLineInfo>(psLineInfoVo.getPageNum(), psLineInfoVo.getPageSize());
        return psLineInfoMapper.findBySearch(page1, psLineInfoVo);
    }

    /**
     * 新增路线
     *
     * @param psLineInfo
     */
    @Override
    @Transactional
    public void addPsLineInfo(PsLineInfo psLineInfo) {
        //TODO 是否启用：系统默认为启用
        if (psLineInfo.getStartpole() >= psLineInfo.getEndpole()) {
            throw new CustomException("不能大于终止杆号");
        } else {
            /**
             * 2、回写杆塔的所属线路字段，
             * 保存杆塔信息表。
             * 事物控制，保存成功后，返回列表页面。
             */
            psLineInfoMapper.insert(psLineInfo);
            //杆塔回写数据
            QueryWrapper<PsPoleInfo> psPoleInfoQueryWrapper = new QueryWrapper<>();
            psPoleInfoQueryWrapper.eq("poleCode", psLineInfo.getLinecode());
            PsPoleInfo psPoleInfo = psPoleInfoMapper.selectOne(psPoleInfoQueryWrapper);
//            PsPoleInfo psPoleInfo = new PsPoleInfo();
            //杆塔
            if (psPoleInfo.getPoleCode().equals(psLineInfo.getLinecode())) {
                //起始杆号
                psPoleInfo.setLineId(psLineInfo.getId());
                //所属线路CODE
                psPoleInfo.setLinecode(psLineInfo.getLinecode());
                //所属线路NAME
                psPoleInfo.setLinename(psLineInfo.getLinename());
                psPoleInfoMapper.updateByLineId(psPoleInfo,psLineInfo.getLinecode());
            } else {
                System.out.println("回写数据不一致");
            }
        }
    }

    /**
     * 修改路线
     *
     * @param psLineInfo
     */
    @Override
    public void updatePsLineInfo(PsLineInfo psLineInfo) {
        psLineInfoMapper.updateById(psLineInfo);
    }

    /**
     * 下拉查询状态
     *
     * @return
     */
    @Override
    public List<PsLineInfo> runningStatus() {
        List<PsLineInfo> list = psLineInfoMapper.selectObjs(Wrappers.<PsLineInfo>lambdaQuery().select(PsLineInfo::getRunningstatusname));
        return list;
    }

    @Override
    public List<PsLineInfo> listpli() {
        return psLineInfoMapper.listpli();
    }

}
